草庐IT

MIPS 指令

全部标签

c++ - CMake "project"指令的正确用法是什么

我有一个很大的代码库,它构建了几十个库和几个可执行文件。代码库按层级分解,几乎每个级别都构建了库。我已经完成并在每个目录中放置了一个CMakeLists.txt文件来构建每个库。在每个CMakeLists.txt中,我都使用了“project(xxx)”指令。这为我定义了PROJECT_NAME、PROJECT_SOURCE_DIR和PROJECT_BINARY_DIR变量,我明智地使用了这些变量。但是,团队中的一个人对这种方法不满意,因为他找不到任何其他人这样做过的真实示例。他经常引用KitWare示例作为未使用这种方法,因此我们也不应该。他提倡的另一种方法是在每个makefile中

c++ - 为什么在使用命名空间指令时没有为函数添加命名空间?

这个c++文件...namespacefoo{classC{voidm();};voidf();}usingnamespacefoo;voidC::m(){}voidf(){}..用这些符号编译成目标文件:$g++foo.cpp-c$nmfoo.o-C000000000000000aTf()0000000000000000Tfoo::C::m()为什么C::m()?得到前缀的命名空间,而不是f()?(我不是使用usingnamespacefoo,而是使用namespacefoo{...}然后两个名称都有foo前缀)。 最佳答案 在v

c++ - gcc 是否使用 Intel 的 SSE 4.2 指令进行文本处理(如果可用)?

我读了hereIntel引入了SSE4.2指令来加速字符串处理。文章引述:TheSSE4.2instructionset,firstimplementedinIntel'sCorei7,providesstringandtextprocessinginstructions(STTNI)thatutilizeSIMDoperationsforprocessingcharacterdata.Thoughoriginallyconceivedforacceleratingstring,text,andXMLprocessing,thepowerfulnewcapabilitiesofthes

c++ - 使用指令——为什么会有如此奇怪的行为?

我有这个示例代码namespacens1{voidfoo(int){}}namespacens2{voidfoo(){}voidbar(){usingnamespace::ns1;foo(42);//whycompilercan'tjustcallns1::foo?}}它不会编译错误:prog.cpp:16:9:error:toomanyargumentstofunction‘voidns2::foo()’我在C++2003标准中找到了这个错误的原因:Ausing-directivespecifiesthatthenamesinthenominatednamespacecanbeuse

c++ - 如何将Visual Studio宏值转换为预处理器指令?

在我的项目中,我需要在运行时访问$(SolutionDir)宏的值。为此,我尝试添加预处理器条目,例如DEBUG_ROOT=$(SolutionDir)或DEBUG_ROOT=\"$(SolutionDir)\",但这由于无效的转义序列而导致各种编译器错误,因为$(SolutionDir)包含单个\字符(例如$(SolutionDir)=c:\users\lukas\desktop\sandbox\)。有没有一种简单的方法可以将$(SolutionDir)宏的值传递到我的代码中?背景我在调试版本中大量使用了OutputDebugString(..)函数,以查看我的代码在做什么。/*de

c++ - 使用 SIMD 指令执行任意 128/256/512 位排列的最快方法是什么?

我想在宽度为128、256或512位的CPU寄存器(xmm、ymm或zmm)上执行单个位、位对和半字节(4位)的任意排列;这应该尽可能快。为此,我正在研究SIMD指令。有谁知道执行此操作的方法/实现它的库?我在Windows上使用MSVC,在Linux上使用GCC,宿主语言是C或C++。谢谢!我得到了一个任意排列,需要打乱大量的位vector/位vector对/半字节。我知道如何为64位值中的位执行此操作,例如usingaBenesnetwork.或者在更宽的SIMD寄存器上混洗8位和更大的block,例如将AgnerFog的GPLedVectorClass库(https://www.

c++ - 为什么公共(public)重载与某些编译器上的私有(private) using 指令冲突?

我在我的一个项目中遇到过以下情况,其中基类有一个函数模板,它被派生类模板中的非模板函数隐藏。在类层次结构的更下方,非模板化函数通过using指令显式地将函数引入作用域。这是一个简化的示例代码:classBase{public:templateconstT&get()const;};templateclassDerived:publicBase{private:usingBase::get;public:constT&get()const;};templateclassMoreDerived:publicDerived{public:usingDerived::get;//;神马:htt

c++ - 未启用 SSE 指令集

我遇到了这个错误:“SSE指令集未启用”。我该如何解决这个问题?我有ACERi7,Ubuntu11.10,请问有人能帮帮我吗?任何帮助将不胜感激!同时运行:sudocat/proc/cpuinfo|grepflags给予:flags:fpuvmedepsetscmsrpaemcecx8apicmtrrpgemcacmovpatpse36clflushdtsacpimmxfxsrssesse2sshttmpbenxrdtscplmconstant_tscarch_perfmonpebsbtsxtopologynonstop_tscaperfmperfpnipclmulqdqdtes64m

c++ - CFI 指令是什么意思? (还有一些问题)

好的,这将是一个很长的问题。我试图了解“缓冲区溢出”是如何工作的。我正在阅读Smashingthestackforfunandprofit通过aleph1并刚刚得到以下代码的反汇编:voidfunction(inta,intb,intc){charbuffer1[5];charbuffer2[10];}voidmain(){function(1,2,3);}使用GCC的-S标志的反义给了我:.file"example1.c".text.globlfunction.typefunction,@functionfunction:.LFB0:.cfi_startprocpushq%rbp.c

c++ - 如何检查编译后的代码是否使用了 SSE 和 AVX 指令?

我写了一些代码来做一堆数学运算,它需要运行得很快,所以我需要它来使用SSE和AVX指令。我正在使用带有标志-O3和-march=native的g++编译它,所以我认为它使用的是SSE和AVX指令,但我不确定。我的大部分代码如下所示:for(inti=0;i有什么方法可以判断我的代码(编译后)是否使用SSE和AVX指令?我想我可以看汇编看看,但我不会汇编,我不知道如何查看编译器输出的汇编。 最佳答案 在Linux下,您还可以反编译您的二进制文件:objdump-dYOURFILE>YOURFILE.asm然后找到所有SSE指令:awk